// Logic 253: Debug mode

#include "defines.txt"
#define temp v255
#define temp2 v254
#define temp3 v253

set.text.attribute(8, 0);
display(24, 0, "Debug mode");
set.text.attribute(15, 0);

if (controller(key_coords)) {
  toggle(coords_shown);
  if (!coords_shown) {
    clear.lines(24, 24, 0);
  }
}

if (controller(key_ego)) {
  temp = 0;
  obj.status.v(temp);
}

if (said("debug", "help")) {
  call(debug_help);
}

if (said("trace")) {
  set(trace_enabled);
}

if ((said("show", "mem") ||
     controller(key_memory))) {
  show.mem();
}

if (said("tp")) {
  get.num("New room: ", temp);
  if (temp == 0) {
    print("Cannot tp into 0.");
  } else {
    new.room.v(temp);
  }
}

if (said("Pos")) {
  get.num("X: ", temp);
  get.num("Y: ", temp2);
  erase(ego);
  reposition.to.v(ego, temp, temp2);
  draw(ego);
}

if (said("show", "var")) {
  get.num("Var number: ", v255);
  v254 = *v255;
  print("Var %v255: %v254");
}

if (said("set", "var")) {
  get.num("Var number: ", temp);
  get.num("Var value: ", temp2);
  *temp = temp2;
}

if (said("show", "flag")) {
  get.num("Flag number: ", v255);
  if (issetv(v255)) {
    print("Flag %v255 is set.");
  } else {
    print("Flag %v255 is not set.");
  }
}

if (said("set", "flag")) {
  get.num("Flag number: ", temp);
  set.v(temp);
}

if (said("reset", "flag")) {
  get.num("Flag number: ", temp);
  reset.v(temp);
}

if ((said("object") ||
     controller(key_object))) {
  get.num("Screen object number: ", temp);
  obj.status.v(temp);
}

if ((said("show", "pri") ||
     controller(key_priority))) {
  show.pri.screen();
}

if ((said("get", "object") || said("get", "inventory", "object"))) {
  get.num("Inventory object number: ", temp);
  if (temp > num_invobjects) {
    print("Invalid object number!");
  }
  else {
    get.v(temp);
  }
}

if (said("gimme", "gimme")) {
  print("You gottum!");
  temp = 1;
GetNextObject:
  get.v(temp);
  if (temp < num_invobjects) {
    temp++;
    goto(GetNextObject);
  }
}

if (said("object", "room")) {
  get.num("Object number: ", v255);
  if (v255 > num_invobjects) {
    print("Invalid object number!");
  }
  else {
    get.room.v(v255, v254);
    if (v254 == 255) {
      print("Object %v255 is in your inventory.");
    }
    else {
      print("Object %v255 is in room %v254.");
    }
  }
}

if (said("set", "pri")) {
  get.num("New priority: ", temp);
  set.priority.v(ego, temp);
}

if (said("release", "pri")) {
  release.priority(ego);
}

if (said("coords")) {
  toggle(coords_shown);
  if (!coords_shown) {
    clear.lines(24, 24, 0);
  }
}

if (coords_shown) {
  get.posn(ego, v253, v254);
  get.priority(ego, v255);
  set.text.attribute(8, 0);
  display(24, 15, "Room:%v0|1 Pri:%v255|2 Pos:%v253|3,%v254|3");
  set.text.attribute(15, 0);
}

if (said("log")) {
  get.string(s1,"Error: ", 22, 0, 25);
  log("Error: %s1");
  clear.lines(22, 24, 0);
  accept.input();
}

return();